import { defineConfig, ConfigEnv, UserConfig } from 'vite'
import path from 'path'
// vite.config.ts中无法使用import.meta.env 所以需要引入
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
// 增加 vue文件 script name值
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
// 生产gz文件
import compression from 'vite-plugin-compression2'
//自動引入組件
import Components from 'unplugin-vue-components/vite'
// 按需加载
import AutoImport from 'unplugin-auto-import/vite'
// import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import OptimizationPersist from 'vite-plugin-optimize-persist'
import PkgConfig from 'vite-plugin-package-config'
function resolve(dir) {
  return path.join(__dirname, '.', dir)
}
import { visualizer } from 'rollup-plugin-visualizer'
// https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  return {
    plugins: [
      //compression({
      // threshold:2000, // 设置只有超过 2k 的文件才执行压缩
      // deleteOriginalAssets:false, // 设置是否删除原文件
      // skipIfLargerOrEqual:true, // 如果压缩后的文件大小与原文件大小一致或者更大时，不进行压缩
      //}),
      visualizer(),
      PkgConfig(),
      OptimizationPersist(),
      vue(),
      vueSetupExtend(),
      AutoImport({
        imports: [
          // 需要自动导入的插件，自定义导入的API
          'vue',
          'vue-router',
          'pinia',
        ],
        dts: 'src/types/auto-import.d.ts',
        resolvers: [ElementPlusResolver({ importStyle: 'sass' })],
      }),
      Components({
        resolvers: [
          ElementPlusResolver({
            importStyle: 'sass',
          }),
        ],
      }),
      // * 使用 svg 图标
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/icons/svg')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',
      }),
      // gzip压缩 生产环境生成 .gz 文件
      //mode === 'production' &&
      // viteCompression({
      //   verbose: true,
      //   disable: false,
      //   threshold: 10240,
      //   algorithm: 'gzip',
      //   ext: '.gz',
      // }),
    ],
    base: mode === 'production' ? './' : '/',
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "./src/styles/index.scss" as *;@use "./src/styles/style.scss" as *;`,
        },
      },
    },
    optimizeDeps: {
      include: [
        'vue',
        'element-plus/es',
        'element-plus/es/components/config-provider/style/css',
        'element-plus/es/components/container/style/css',
        'element-plus/es/components/main/style/css',
        'element-plus/es/components/header/style/css',
        'element-plus/es/components/date-picker/style/css',
        'element-plus/es/components/drawer/style/css',
        'element-plus/es/components/image/style/css',
        'element-plus/es/components/image/style/css',
        'element-plus/es/components/table/style/css',
        'element-plus/es/components/table-column/style/css',
        'element-plus/es/components/input/style/css',
        'element-plus/es/components/dropdown/style/css',
        'element-plus/es/components/popover/style/css',
        'element-plus/es/components/dropdown-item/style/css',
        'element-plus/es/components/dropdown-menu/style/css',
        'element-plus/es/components/pagination/style/css',
        'element-plus/es/components/scrollbar/style/css',
        'element-plus/es/components/dialog/style/css',
        'element-plus/es/components/loading/style/css',
        'element-plus/es/components/tabs/style/css',
        'element-plus/es/components/tab-pane/style/css',
        'element-plus/es/components/select/style/css',
        'element-plus/es/components/option/style/css',
        'vue',
        'pinia',
        'sass',
        'vue-router',
      ],
    },
    // 配置别名
    resolve: {
      alias: {
        '@': resolve('src'),
        static: resolve('public/static'),
      },
      // 忽略后缀名的配置选项, 添加 .vue 选项时要记得原本默认忽略的选项也要手动写入
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    },

    //启动服务配置
    server: {
      // 服务器主机名，如果允许外部访问，可设置为 "0.0.0.0" 也可设置成你的ip地址
      host: '0.0.0.0',
      port: 8080,
      strict: true, // 当设置为 true 时，对不存在的导入抛出错误
      open: true,
      https: false,
      cors: true,
      // 代理跨域（模拟示例）
      proxy: {
        '/user-data-admin': {
          target: 'https://api-agri.huidatech.cn/user-data-admin', // easymock
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/user-data-admin/, ''), // 将ccc替换为空
        },
      },
    },
    // 生产环境打包配置
    //去除 console debugger
    esbuild: {
      pure: mode === 'production' ? ['console.log', 'debugger'] : [],
    },
    build: {
      // minify:false,
      // rollupOptions:{
      //   output:{
      //     chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称
      //     entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
      //     assetFileNames: '[ext]/[name]-[hash].[ext]', // 资源文件像 字体，图片等
      //     manualChunks:(id)=>{
      //       if(id.includes('node_modules')){
      //           return 'vendor';
      //       }
      //     }
      //   }
      // },
      terserOptions: {
        compress: {
          drop_console: false,
          drop_debugger: false,
        },
      },
    },
  }
})
